home *** CD-ROM | disk | FTP | other *** search
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <stdio.h>
- #include <netdb.h>
-
- #include "ciscotalk.h"
-
- extern char *index();
- extern char *optarg;
- extern int optind;
-
- char host[255] = SERVER;
- char lbuf[80];
- char verbose = 0;
-
-
- /* 1.1 90/02/07 dfk@cwi.nl */
-
- main(argc, argv)
- int argc; char **argv;
- {
-
- register int i;
- register int s;
- char c;
- struct sockaddr_in sin;
- struct hostent *hp;
- struct servent *sp;
- register FILE *socks;
-
- while ((i=getopt(argc, argv, "vh:")) != EOF)
- {
- switch(i)
- {
- case 'h':
- strncpy(host, optarg, sizeof(host));
- break;
-
- case 'v':
- verbose++;
- break;
-
- case '?':
- fprintf(stderr, "usage: ciscotalk [-h host]\n");
- exit(1);
- }
- }
-
- if ((hp=gethostbyname(host)) == NULL)
- {
- fprintf(stderr, "ciscotalk: %s unknown\n", host);
- exit(1);
- }
-
- if ((s=socket(hp->h_addrtype, SOCK_STREAM, 0)) <0)
- {
- perror("ciscotalk: cannot create socket");
- exit(1);
- }
-
- if ((sp=getservbyname("telnet", "tcp")) == NULL)
- {
- fprintf(stderr, "ciscotalk: can't find service\n");
- exit(1);
- }
-
- sin.sin_family = hp->h_addrtype;
- bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
- sin.sin_port = sp->s_port;
-
- if (verbose)
- fprintf(stderr, "connecting to %s ...\n\n", hp->h_name);
-
- if (connect(s, &sin, sizeof (sin), 0) < 0)
- {
- perror("ciscotalk: connect");
- exit(1);
- }
-
- if ((socks= fdopen(s, "r")) == NULL)
- {
- perror("ciscotalk: fdopen");
- exit(0);
- }
-
- sleep(1);
- write(s, "\r\n", 2);
- readcmd(socks);
- while(read(0, &c, 1) == 1)
- {
- if (c == '\n')
- {
- write(s, "\r\n", 2);
- readcmd(socks);
- }
- else
- write(s, &c, 1);
- }
- exit(0);
- }
-
- readcmd(fd)
- FILE *fd;
- {
- while (fgets(lbuf, sizeof(lbuf)-1, fd) !=NULL)
- {
- fputs(lbuf, stdout);
- if ( occurs(lbuf, PROMPT1)
- || occurs(lbuf, PROMPT2)
- || occurs(lbuf, PROMPT3)
- )
- {
- fflush(stdout);
- return;
- }
- }
- fflush(stdout);
- }
-
- occurs(str, pat)
- char *str, *pat;
- {
- register char *point = str;
-
- while (point=index(point, *pat))
- {
- if (strncmp(point, pat, strlen(pat)) == 0)
- return(1);
- point++;
- }
- return(0);
- }
-